iT邦幫忙

2023 iThome 鐵人賽

DAY 25
0
Vue.js

.NET Core與Vue3組合開發技系列 第 25

[Day 25] 父子組件常見操作_part5.跨組件屬性傳遞(子組件單或多個根元素)

  • 分享至 

  • xImage
  •  

父組件中匯入子組件之後,我們就可以在父組件中對子組件傳遞屬性啦。
而這個屬性的傳遞會是自動去實踐的,不需要在父組件和子組件中做任何操作。

在父組件中對子組件傳遞屬性有兩種情況
Case1. 如果子組件只有一個根元素,則會將屬性傳遞給根元素。

Case2. 如果子組件中存在多個根元素,則不會自動傳遞屬性,需用v-bind="$attrs" 於子組件中指定要傳遞給哪個根元素。

小叮嚀:所謂根元素就是在該組建中包在最外層< template >直接下一層的元素

Case1.子組件只有一個根元素
在此假設我們於./components/MyChildComp.vue
這邊定義我們的vue子組件

<template>
    <div class="m-3">
        <span>提交</span>
    </div>
</template>

在 App.vue 父組件中引用此子組件並傳遞屬性,在此模擬class 及 name兩個屬性的傳遞

傳遞前

<template>
  <main>
    <MyChildComp></MyChildComp>
  </main>
</template>

<script setup>
  import MyChildComp from './components/MyChildComp.vue';

</script>

https://ithelp.ithome.com.tw/upload/images/20231004/20107452KSISTe5bRS.png

傳遞後

<template>
  <main>
    <MyChildComp class="btn btn-primary" name="a1"></MyChildComp>
  </main>
</template>

<script setup>
  import MyChildComp from './components/MyChildComp.vue';

</script>

將父元件中的 class 屬性傳遞給子元件的 div 元素上形成的結果,可觀察到直接套用到子組件的根元素上

https://ithelp.ithome.com.tw/upload/images/20231004/201074522x5ESjYZgU.png

子組建中的< div >元素原先 class 屬性就已存在,值為 m-3。
而在父組件中又傳過來一個 class 屬性,因此會直接合併。

Case2. 子組件中存在多個根元素

在此假設我們於./components/MyChildComp.vue
這邊定義我們的vue子組件

<template>
    <div class="m-3">
        <span>提交</span>
    </div>
    <div class="m-3" v-bind="$attrs">
        <span>確定</span>
    </div>
    <div class="m-3">
        <span v-bind="$attrs">重置</span>
    </div>
</template>

在 App.vue 父組件中引用此子組件並傳遞屬性,在此模擬class 及 name兩個屬性的傳遞

<template>
  <main>
    <MyChildComp class="btn btn-primary" name="a1"></MyChildComp>
  </main>
</template>

<script setup>
  import MyChildComp from './components/MyChildComp.vue';

</script>

https://ithelp.ithome.com.tw/upload/images/20231004/201074521TCGD1gPDX.png

在此觀察的到後兩個 div 上都有套用了父組件傳過來的 class 樣式,而只有第1個div沒有套上。
一個套到 div 元素上,一個套到 span 元素上。

在子組件中,哪個元素使用了 v-bind="$attrs",則會應用父組件傳過來的屬性,不管有多少個,都會套到。

本篇已同步發表至個人部落格
https://coolmandiary.blogspot.com/2023/10/2023day-25-part5.html


上一篇
[Day 24] 父子組件常見操作_part4.vue動態組件實作
下一篇
[Day 26] 父子組件常見操作_part6.vue的依賴注入(provide,inject)
系列文
.NET Core與Vue3組合開發技30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言